use std::env;

fn op(op_str: &str) -> Option<fn(f64, f64) -> f64> {
    match op_str {
        "+" => Some(|a, b| -> f64 {a + b}),
        "-" => Some(|a, b| -> f64 {a - b}),
        "*" => Some(|a, b| -> f64 {a * b}),
        "/" => Some(|a, b| -> f64 {a / b}),
        _   => None
    }
}


/**
 * 乘法的 * 需要转义 \*
 * 12 \* 22
 * 12 + 22
 * 12 - 22
 * 12 / 22
 */
fn cal() {
    /**
     * 0 - 程序名称
     * 1 - 第一个参数
     * n - 第n个参数
     */
    let args: Vec<String> = env::args().collect();

    let x = args[1].parse::<f64>().unwrap();
    let op_str = args[2].as_str();
    let y = args[3].parse::<f64>().unwrap();

    match op(op_str) {
        Some(f) => println!("{} {} {} = {}", x, op_str, y, f(x, y)),
        _       => println!("运算符不支持")
    }
}

fn main() {
    cal()
}
